/**
 * feedback
 * @author tanggf
 */
$(function(){
	feedback.run();
});

var feedback = {
		run: function(){
			this._init_();
			this._start_();
			this._init_events();			
		},
		
		_init_: function(){
			this.contextPath = $("#contextPath").val() || '';
			this.verifyId = Math.random() + new Date().getTime();
			$("#key").val(this.verifyId);
			this.$codeDiv = $("#verify_code_div");
		},
		
		_start_: function(){
			this._list_feedback();
			this._get_verify_image();
		},
		
		_init_events: function(){
			//max length
			$("#feedback_input_div").mlength({
				max: 500
			});
		},
		
		_list_feedback: function(url, cache){
			url = url || this._get_list_feedback_url();
			if(cache !== false){
				cache = true;
			}
			$.ajax(url, {
				cache: cache,
				success: function(result){
					$("#feedback_list_div").html(result);
					$("#feedback_list_div > div.pageing > a").click(function(){
						var url = $(this).attr("href");
						feedback._list_feedback(url);
						return false;
					});
				}
			});		
		},
		
		_get_list_feedback_url: function(){
			return [this.contextPath, '/feedback/list'].join("");
		},
		
		_get_verify_image: function(){
			var url = this.contextPath + "/feedback/verify_code?key=" + this.verifyId;
			var $img = $("<img></img").attr("src", url);
			this.$codeDiv.html("").append($img);
			$img.click(function(){
				var url = feedback.contextPath + "/feedback/new_verify_code?key=" + feedback.verifyId + "&t=" + new Date().getTime();
				$(this).attr("src", url);
				return false;
			});
			
			$("#refresh_verify_a").click(function(){
				$img.click();
			});
			
			var feedValid = $.validate($("#feedback_form"), {
				beforeValidate: function(){
					var s = $.trim($("#feedback_content").val());
					if(s){
						return true;
					}
					return false;
				}
			});			
			//synclick feedback btn
			$("#feedback_btn").synclick({
				url: this.contextPath + "/feedback/post",
				dataType: 'json',
				type: 'POST',
				prepareData: function(){
					return $("#feedback_form").serialize();
				},
				beforeSend: function(){			
					var content = $.trim($("#feedback_content").val());
					if( ! content){
						$("#feedback_result_div").addClass("validate-error").html("Feedback content cannot be empty.");
						return false;
					}else{
						$("#feedback_result_div").html("");
					}
					
					return feedValid.validate();					
				},
				success: function(result){
					feedback._handle_feedback_result(result, $img);
				}
			});			
		},
		
		_handle_feedback_result: function(result, $img){
			var msg = result.message;
			msg = msg.charAt(0).toUpperCase() + msg.substring(1);
			$("#feedback_result_div").html(msg);							
			$("#code").val("");		
			if(result.isDone){			
				$("#feedback_result_div").addClass("validate-success").removeClass("validate-error");
				$("#feedback_content").val("").focus();
				feedback._list_feedback(null, false);
			}else{
				$("#feedback_result_div").removeClass("validate-success").addClass("validate-error");
			}
			$img.click();
		}
};